package com.ayz.gateway.core.context.config;


import com.ayz.gateway.core.rpc.IGatewayApi;
import com.ayz.gateway.core.rpc.MappedMethod;

/**
 * @ClassName Configuration
 * @Description TODO: 立足于网关上下文的全局配置项 包含RPC泛化调用和配置参数
 * @Author 快乐的星球
 * @Date 2023/5/8 22:18
 * @Version 1.0
 **/
public interface Configuration {

    /**
     * 注册生成泛化调用代理的的工厂
     * @param applicationName 应用程序的名称
     * @param interfaceName   接口的名称
     * @param methodName   rpc资源方法的名称
     */
    public void registryGenericReference(String applicationName, String interfaceName, String methodName);

    /**
     * 获取具体的RPC泛化调用执行器
     * @param rpcResource RPC资源的唯一名称 默认是 "applicationName@interfaceName@methodName"
     * @return
     */
    public IGatewayApi getGenericReference(String rpcResource);

    /**
     * 注册具体的HTTP URI到RPC资源的映射
     * @param httpUri
     * @param mappedMethod
     */
    public void registerURIMapped(String httpUri, MappedMethod mappedMethod);

    /**
     * 根据HTTP URI资源获取与RPC资源映射的绑定
     * @param httpUri
     * @return
     */
    public MappedMethod getMappedMethod(String httpUri);


}
